接近一個月下來建立了許多虛擬機和服務 若是順應目前的趨勢
將我們的地端環境推上雲 並採用雲原生的方案
在雲上的架構和使用的技術會有那些變化?
今天就來回顧一下地端環境並且來看看上雲後的變化
以到 DAY28 來說我的架構大致上是長這樣
在這個環境內的網路是由 Proxmox VE 開出來的虛擬網路 Proxmox Host-only Network 為主環境
Proxmox Host-only Network 的 Gateway 會由 Router 這台 VM 負責
而我平時使用的 CLI Bastion 是使用 SSH 到 Router
若是要控制網頁介面的話會改用 win-clt 這台 Windows 10 VM
以服務的功能來大致分類的話 可以分出 Monitoring 和 Kubenetes 和 DNS
還有其他三台功能比較雜的 VM
在 Monitoring 這邊有這幾個部分Prometheus
負責在各 VM 上收集 MetricGrafana Loki
負責集中各 VM 上的 LogGrafana
負責視覺化 Prometheus 和 Loki 的資料, 並提供 Alert 來警告 UserphpIPAM
負責管理 IP Usage 和儲存一些實體 Rack 的資訊
這邊就是由 lke-main
lke-node1
lke-node2
組成的 K8s Cluster 提供容器的運行空間
這邊使用了 Containerd
來作為 CRI, Calico
作為 CNI
DNS 的部分我是將服務放在 Router VM 上的
目前的 db.檔案長這個樣子
跟原本比起來多了蠻多的
最後是上述沒有講到的服務 以每台 VM 上架的服務來說是這樣:LCR
提供 Docker Image Repository 和 NTP ServiceNavidrome
提供 Navidrome 音樂串流服務OMV
(OpenMediaVault) 提供 NAS 的功能給 Navidrome 音樂存放點且提供 SFTPGO 給使用者上傳音樂檔
大致上地端的環境說明就這樣 接著來看看搬到雲端後架構會如何變化
這邊以 Google 的 GCP 為使用的雲端來規劃架構 架構圖如下
網路的部分這邊以一個 VPC
(Virtual Private Cloud) 使用
VPC 是 GCP 上的一個私有網路環境 VPC 下可以透過 Subnet
(子網路) 來指定網路的所在地和 CIDR
Subnet 的機器若需要對外會使用 Cloud NAT
來轉換到對外 IP 上網
而地端環境要和雲端服務連接 可以透過 Cloud VPN
來連接兩邊的網路環境
接著來看看服務可以使用那些雲原生的服務來做
Cloud Logging
是收集整個雲端環境的 Log 並存放的地方 基本上就是對應在地端的 Grafana LokiCloud Monitoring
是集中且視覺化 Metric 和製作 Alert 並且提供 Uptime Check 去做 Health Check 的功能 對應了在地端的 Prometheus 和 Grafana 的功能
而 phpIPAM 的功能在雲端環境是可以直接透過觀察 VPC 內的 IP Address 頁面就可以知道哪些 IP 正在使用等資訊
K8s 的部分則是使用 GCP 上的 GKE
(Google Kubenetes Engine) 來運行
和地端不同的是 Google 有針對 K8s Node 上運行的系統進行優化可以使用到更好的效能
預裝的 CRI 和 CNI 也都是 Google 有去對雲端環境進行優化的
且能透過 GCP 上的 Auto-scaling 去做到反映負載來增加運算資源的功能
讓服務能夠依照使用情形來增減運算資源 防止服務因負載過大無法回應使用者
DNS 的部分在 GCP 可以使用 Cloud DNS
/ Cloud Domain
來做管理Cloud DNS
是作為 Bind9 的功能 管理 Domain 內的 Record 可以設定 Private 和 Public 來對應使用情形Cloud Domain
是可以向 GCP 來買 Domain 並且集中化管理持有的 Domain
Artifact Registry
是 GCP 上存放 Container Image 的地方 也可以作為存放 APT npm 的 Repository 對應地端上的 LCR Image RepositoryFilestore
是 GCP 上提供 NFS 檔案存放的服務 對應地端上的 OMV 提供的存放點
Navidrome 的功能則是安裝在 GCE
(Google Compute Engine) 上GCE
是虛擬機服務 能夠讓我們自己依照使用情形設定虛擬機所需要的 vCPU 和 RAM 來跑 Serverful 的 TASK
而 NTP 則是 GCP 上有提供一個 NTP 讓所有的服務和他進行校時 不需要自己架設
可以發現在上雲後的架構上看到只有 Navidrome 是唯一一個還是需要自己安裝在虛擬機上的服務
其他服務/功能雲端供應商都已經將它們以 SaaS / PaaS / IaaS 的方式提供了
不但省下管理 Infra 的工本讓管理者/開發者能夠更專注在自己的工作上
安全性的部分各個雲端供應商也都有自己的方案
像 Google 的 GCP 有提供零信任模型出來強化安全性 有興趣的可以參考鐵人賽隊友的文章
且雲端的彈性和擴展性提供了很好的機制來對應不同的使用情境
讓服務能夠始終保持良好的狀況來回應使用者